package com.freemalll.merchant.utils;

import cn.hutool.extra.spring.SpringUtil;
import com.alibaba.fastjson.JSON;
import com.freemalll.merchant.service.SysConfigService;
import org.apache.commons.lang3.StringUtils;

import java.util.List;
import java.util.Map;

public final class ConfigUtil {

    private static SysConfigService sysCfgManager;

    private static void init() {
        if (sysCfgManager == null) {
            sysCfgManager = SpringUtil.getBean(SysConfigService.class);
        }
    }

    /**
     * 通过配置key 获取配置信息
     */
    public static String getCoValue(String key) {
        init();
        return sysCfgManager.getConfigEntityByKey(key).getCoValue();
    }

    /**
     * 通过配置key 获取对应的实体类
     */
    public static <T> T get(String key, Class<T> clazz) {
        String value = getCoValue(key);
        if (clazz == String.class) {
            return (T) value;
        }
        if (StringUtils.isBlank(value)) {
            return null;
        }
        if (clazz == Boolean.class) {
            return (T) Boolean.valueOf(value);
        }
        if (clazz == Long.class) {
            return (T) Long.valueOf(value);
        }

        return JSON.parseObject(value, clazz);
    }

    /**
     * 通过配置key 获取list
     */
    public static <T> List<T> getList(String key, Class<T> clazz) {
        String value = getCoValue(key);
        if (StringUtils.isBlank(value)) {
            return null;
        }
        return JSON.parseArray(value, clazz);
    }

    /**
     * 通过配置key 获取Map
     */
    public static Map<String, Object> get(String key) {
        return get(key, Map.class);
    }

    /**
     * 通过key，编码获取配置对象
     */
    public static <T> T getVoByConfigKey(String key, String code, Class<T> clazz) {
        String config = getCoValue(key);
        if (StringUtils.isNotBlank(config)) {
            Map map = JSON.parseObject(config);
            if (!map.isEmpty()) {
                return JSON.parseObject(JSON.toJSONString(map.get(code)), clazz);
            }
        }
        return null;
    }
}
